//
//  LDSTableViewCellViewModel.m
//  LDSMVVMBase
//
//  Created by kai_leedarson on 2017/9/30.
//  Copyright © 2017年 maple_leedarson. All rights reserved.
//

#import "LDSTableViewCellViewModel.h"

@implementation LDSTableViewCellViewModel

- (id)init
{
    self = [super init];
    if (self) {
        self.tableViewCellStyle = UITableViewCellStyleDefault;
        self.accessoryType = UITableViewCellAccessoryNone;
    }
    return self;
}


- (LDSBaseTableViewCell *)cell {
    if (_viewClass && [_viewClass isSubclassOfClass:[LDSBaseTableViewCell class]]) {
        NSString *identifier = [NSString stringWithFormat:@"cell:<%@>",NSStringFromClass(_viewClass)];
        LDSBaseTableViewCell *cell = (LDSBaseTableViewCell *)[_tableView dequeueReusableCellWithIdentifier:identifier];
        //优先生成xib
        if (nil == cell) {
            NSString *xibPath = [[NSBundle mainBundle] pathForResource:NSStringFromClass(_viewClass) ofType:@"nib"];
            if([[NSFileManager defaultManager] fileExistsAtPath:xibPath]){
                UINib *nib = [UINib nibWithNibName:NSStringFromClass(_viewClass) bundle:nil];
                [_tableView registerNib:nib forCellReuseIdentifier:identifier];
                cell = (LDSBaseTableViewCell *)[_tableView dequeueReusableCellWithIdentifier:identifier];
            }
        }
        //xib不存在 使用 纯代码
        if (nil == cell) {
            cell = [[_viewClass alloc] initWithStyle:self.tableViewCellStyle
                                     reuseIdentifier:identifier];
        }
        if (cell) {
            cell.tag = self.tag;
            cell.accessoryType = self.accessoryType;
        }
        return cell;
    }
    return nil;
}

+ (LDSTableViewCellViewModel *)modelCellWithClass:(Class)vClass
                               model:(id)model {
    return [LDSTableViewCellViewModel modelCellWithClass:vClass model:model tag:-1];
}

+ (LDSTableViewCellViewModel *)modelCellWithClass:(Class)vClass model:(id)model tag:(NSInteger)tag {
    LDSTableViewCellViewModel *vModel = [[LDSTableViewCellViewModel alloc] init];
    if (vClass) {
        [vModel setViewClass:vClass];
        [vModel setModel:model];
        [vModel setTag:tag];
    }
    return vModel;
}

- (CGFloat)height {
    if (_viewClass && [_viewClass isSubclassOfClass:[LDSBaseTableViewCell class]]) {
        return [_viewClass height:self.model width:_tableView.frame.size.width];
    }
    return 0;
}



@end
